package it.venere.beans;

import java.util.Collection;
import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

/**
 * Session Bean dell'Amministrazione
 * @author Luca
 */
@Stateless
public class AmministrazioneBean implements AmministrazioneBeanLocal, AmministrazioneBeanRemote {
    @PersistenceContext(name="amministrazione-pc")
    EntityManager em = null;
    
    protected Collection <Cliente> listaClienti = null;
    protected Collection <Conto> listaConti = null;
    protected Cliente cliente = null;
    
//    @TransactionAttribute(TransactionAttributeType.REQUIRED)
//    public Long addBill(BillService aBill) {
//        em.persist(aBill);
//        return aBill.getId();
//    }
//    
//    public void removeBill(Long aBillId) {
//        BillService bill = em.find(BillService.class, aBillId);
//        em.remove(bill);
//    }
    
    @Override
    @TransactionAttribute(TransactionAttributeType.REQUIRED)
    public long creaCliente(String nome, String cognome, String codFiscale) {
        cliente = new Cliente(nome, cognome, codFiscale);
        em.persist(cliente);
        return cliente.getNumCliente();
    }
    
    public Collection<Cliente> getListaClienti() {
        listaClienti = em.createQuery("from Cliente cliente").getResultList();
        return listaClienti;
    }
    
    public Collection<Conto> getListaConti() {
        listaConti = em.createQuery("from Conto conto").getResultList();
        return listaConti;
    }
    
//    public void eliminaCliente(int numCliente) {
//        Cliente cliente = em.find(Cliente.class, );
//        
//        inter.getCliente(numCliente);
//        if (cliente==null) {
//                throw new Exception("Il cliente è inesistente!");
//        }
//
//        List<Conto> listaContiCliente = inter.getListaConti(numCliente);
//        if (listaContiCliente.size()>0) {
//                throw new Exception("Il cliente non può essere eliminato in quanto possiede ancora conti associati.");
//        }
//
//        inter.deleteCliente(numCliente);
//    }
//
//	@Override
//	public int creaCliente(String nome, String cognome, String codFiscale) throws Exception {
//		inter.verificaCliente(codFiscale);
//		
//		Cliente cliente = new Cliente(nome, cognome, codFiscale);
//		return inter.createCliente(cliente);
//	}
//
//	@Override
//	public IConto creaConto(ICliente cliente) throws Exception {
//		Conto conto = new Conto(cliente);
//		return inter.createConto(conto);
//	}
//
//	@Override
//	public void eliminaConto(int numeroConto) throws Exception {
//		Conto conto = inter.getConto(numeroConto);
//		if (conto==null) {
//			throw new Exception("Il conto cercato è inesistente!");
//		}
//		
//		inter.deleteConto(numeroConto);
//	}
//	
//	@Override
//	public void eliminaCliente(int numCliente) throws Exception {
//		Cliente cliente = inter.getCliente(numCliente);
//		if (cliente==null) {
//			throw new Exception("Il cliente è inesistente!");
//		}
//		
//		List<Conto> listaContiCliente = inter.getListaConti(numCliente);
//		if (listaContiCliente.size()>0) {
//			throw new Exception("Il cliente non può essere eliminato in quanto possiede ancora conti associati.");
//		}
//		
//		inter.deleteCliente(numCliente);
//	}
//	
//	@Override
//	public void aggiornaConto(IConto conto) throws Exception {
//		inter.updateConto(conto);
//	}
//
//	@Override
//	public void sbloccaConto(int numConto) throws Exception {
//		Conto conto = inter.getConto(numConto);
//		if (conto==null) {
//			throw new Exception("Il conto è inesistente!");
//		}
//		
//		if (conto.getBloccato()<3) {
//			throw new Exception("Il conto è già sbloccato.");
//		}
//		
//		inter.sbloccaConto(numConto);
//	}
    // TODO: Add business logic below. (Right-click in editor and choose "Insert Code > Add Business Method")

}
